#include "ros/ros.h"
#include "std_msgs/String.h"//普通文本类型的消息
#include <sstream>

/*
    需求: 实现基本的话题通信，一方发布数据，一方接收数据，
         实现的关键点:
         1.发送方
         2.接收方
         3.数据(此处为普通文本)

         PS: 二者需要设置相同的话题

    消息发布方:
        循环发布信息:HelloWorld 后缀数字编号

    实现流程:
        1.包含头文件 
        2.初始化 ROS 节点:命名(唯一)
        3.实例化 ROS 句柄
        4.实例化 发布者 对象
        5.组织被发布的数据，并编写逻辑发布数据

*/

 
int main(int argc, char  *argv[])
{
    //2.初始化 ROS 节点:命名(唯一)
    ros::init(argc,argv,"talker");

    //3.实例化 ROS 句柄
    ros::NodeHandle nh;//该类封装了 ROS 中的一些常用功能

    //4.实例化 发布者 对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);

    //5.组织被发布的数据，并编写逻辑发布数据
    std_msgs::String msg;
    
    std::string msg_front = "Hello 你好！"; //消息前缀
    
    int count = 0;//消息计数器
    ros::Rate rate(10);//逻辑(一秒10次)

    while(ros::ok())
    { 
        //设置编码
        setlocale(LC_ALL,"");

        //使用 stringstream 拼接字符串与编号
        std::stringstream ss;
        ss << msg_front << count;
        msg.data = ss.str();

        //发布消息
        pub.publish(msg);

        //加入调试，打印发送的消息
        ROS_INFO("发送的消息:%s",msg.data.c_str());

        //根据前面制定的发送贫频率自动休眠 休眠时间 = 1/频率；
        rate.sleep();

        //循环结束前，让 count 自增
        count++;
        
        //暂无应用
        ros::spinOnce();
    }

    return 0;
}
